#include"process.h"
#include<stdlib.h>
#include<time.h>
#define size 100
#define precent 100.0

char flag[3]={'\\','/','~'};
void process()
{
    printf("\033[?25l");      //隐藏光标
    //version  1
    char bar[size+1]={0};
    //memset(bar,'\0',sizeof(bar));
    int idx=0;
    while(idx<=size)
    {
        printf("[%-100s] [%d%%] [%c]\r",bar,idx,flag[idx%3]);//向左对其，占100个字符，显示当前百分比
        fflush(stdout);
        usleep(1000*150);
        bar[idx++]='#';
    }
    printf("\n");

    printf("\033[?25h");      //显示光标
}

//version 2 版本
void process_v2(double rate)
{  
    static double idx=0.0;//我们以最小单位为0.1来跑进度条
    static char bar[size+1]={0};  //static 静态数组可以让上一次数组中的内容得以保存
    static int cnt=0;//cnt可以让我们的下载看起来不是那么卡顿，也就是后面的下载提示一直在旋转，可以有效缓解用户烦躁^-^
    static int initialized = 0;
    if (!initialized) 
    {
        srand(time(NULL)); // 初始化随机数种子，仅在第一次调用时执行
        initialized = 1;
    }
    // printf("%.1f %.1f\n",idx,rate);
    //如果rate没有超过idx，说明下载进度出现卡顿，此时应该继续向屏幕打印上一轮的进度
    if(idx>=rate)
    {
         printf("[\033[40;34m%-100s\033[0m] [%.1f%%] [%c]\r",bar,idx,flag[(++cnt)%3]);//向左对其，占100个字符，显示当前百分比
         fflush(stdout);
         usleep(1000*80*(rand()%(10-0+1))); //卡顿时间一般要久一点，也可以设为随机值
    }
    if(rate>=precent) rate=precent;//precent=100.0,我们在上面定义了，为了方便就不展示了
    while(idx<=rate)
    {
         printf("[\033[40;34m%-100s\033[0m] [%.1f%%] [%c]\r",bar,idx,flag[(++cnt)%3]);//向左对其，占100个字符，显示当前百分比
         fflush(stdout);
         usleep(1000*20*(rand()%(10-0+1))); //模拟下载速度时刻发生变化
         bar[(int)idx]='#';
         idx+=0.1;
    }
   
}
